/*
 * jQuery Nivo Slider v3.2
 * http://nivo.dev7studios.com
 *
 * Copyright 2012, Dev7studios
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 */

function showSlider() {
  var NivoSlider = function(element, options){
    // Defaults are below
    var settings = $.extend({}, $.fn.nivoSlider.defaults, options);

    // Useful variables. Play carefully.
    var vars = {
      currentSlide: 0,
      currentImage: '',
      totalSlides: 0,
      running: false,
      paused: false,
      stop: false,
      controlNavEl: false
    };

    // Get this slider
    var slider = $(element);
    slider.data('nivo:vars', vars).addClass('nivoSlider');

    // Find our slider children
    var kids = slider.children();
    kids.each(function() {
      var child = $(this);
      var link = '';
      if(!child.is('img')){
        if(child.is('a')){
          child.addClass('nivo-imageLink');
          link = child;
        }
        child = child.find('img:first');
      }
      // Get img width & height
      var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
          childHeight = (childHeight === 0) ? child.attr('height') : child.height();

      if(link !== ''){
        link.css('display','none');
      }
      child.css('display','none');
      vars.totalSlides++;
    });

    // If randomStart
    if(settings.randomStart){
      settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
    }

    // Set startSlide
    if(settings.startSlide > 0){
      if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
      vars.currentSlide = settings.startSlide;
    }

    // Get initial image
    if($(kids[vars.currentSlide]).is('img')){
      vars.currentImage = $(kids[vars.currentSlide]);
    } else {
      vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
    }

    // Show initial link
    if($(kids[vars.currentSlide]).is('a')){
      $(kids[vars.currentSlide]).css('display','block');
    }

    // Set first background
    var sliderImg = $('<img/>').addClass('nivo-main-image');
    sliderImg.attr('src', vars.currentImage.attr('src')).show();
    slider.append(sliderImg);

    // Detect Window Resize
    $(window).resize(function() {
      slider.children('img').width(slider.width());
      sliderImg.attr('src', vars.currentImage.attr('src'));
      sliderImg.stop().height('auto');
      $('.nivo-slice').remove();
      $('.nivo-box').remove();
    });

    //Create caption
    slider.append($('<div class="nivo-caption"></div>'));

    // Process caption function
    var processCaption = function(settings){
      var nivoCaption = $('.nivo-caption', slider);
      if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
        var title = vars.currentImage.attr('title');
        if(title.substr(0,1) == '#') title = $(title).html();

        if(nivoCaption.css('display') == 'block'){
          setTimeout(function(){
            nivoCaption.html(title);
          }, settings.animSpeed);
        } else {
          nivoCaption.html(title);
          nivoCaption.stop().fadeIn(settings.animSpeed);
        }
      } else {
        nivoCaption.stop().fadeOut(settings.animSpeed);
      }
    }

    //Process initial  caption
    processCaption(settings);

    // In the words of Super Mario "let's a go!"
    var timer = 0;
    if(!settings.manualAdvance && kids.length > 1){
      timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
    }

    // Add Direction nav
    if(settings.directionNav){
      slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');

      $(slider).on('click', 'a.nivo-prevNav', function(){
        if(vars.running) { return false; }
        clearInterval(timer);
        timer = '';
        vars.currentSlide -= 2;
        nivoRun(slider, kids, settings, 'prev');
      });

      $(slider).on('click', 'a.nivo-nextNav', function(){
        if(vars.running) { return false; }
        clearInterval(timer);
        timer = '';
        nivoRun(slider, kids, settings, 'next');
      });
    }

    // Add Control nav
    if(settings.controlNav){
      vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
      slider.after(vars.controlNavEl);
      for(var i = 0; i < kids.length; i++){
        if(settings.controlNavThumbs){
          vars.controlNavEl.addClass('nivo-thumbs-enabled');
          var child = kids.eq(i);
          if(!child.is('img')){
            child = child.find('img:first');
          }
          if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
        } else {
          vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
        }
      }

      //Set initial active link
      $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');

      $('a', vars.controlNavEl).bind('click', function(){
        if(vars.running) return false;
        if($(this).hasClass('active')) return false;
        clearInterval(timer);
        timer = '';
        sliderImg.attr('src', vars.currentImage.attr('src'));
        vars.currentSlide = $(this).attr('rel') - 1;
        nivoRun(slider, kids, settings, 'control');
      });
    }

    //For pauseOnHover setting
    if(settings.pauseOnHover){
      slider.hover(function(){
        vars.paused = true;
        clearInterval(timer);
        timer = '';
      }, function(){
        vars.paused = false;
        // Restart the timer
        if(timer === '' && !settings.manualAdvance){
          timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
        }
      });
    }

    // Event when Animation finishes
    slider.bind('nivo:animFinished', function(){
      sliderImg.attr('src', vars.currentImage.attr('src'));
      vars.running = false;
      // Hide child links
      $(kids).each(function(){
        if($(this).is('a')){
          $(this).css('display','none');
        }
      });
      // Show current link
      if($(kids[vars.currentSlide]).is('a')){
        $(kids[vars.currentSlide]).css('display','block');
      }
      // Restart the timer
      if(timer === '' && !vars.paused && !settings.manualAdvance){
        timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
      }
      // Trigger the afterChange callback
      settings.afterChange.call(this);
    });

    // Add slices for slice animations
    var createSlices = function(slider, settings, vars) {
      if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
      $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
      var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();

      for(var i = 0; i < settings.slices; i++){
        var sliceWidth = Math.round(slider.width()/settings.slices);

        if(i === settings.slices-1){
          slider.append(
              $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
                left:(sliceWidth*i)+'px',
                width:(slider.width()-(sliceWidth*i))+'px',
                height:sliceHeight+'px',
                opacity:'0',
                overflow:'hidden'
              })
          );
        } else {
          slider.append(
              $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
                left:(sliceWidth*i)+'px',
                width:sliceWidth+'px',
                height:sliceHeight+'px',
                opacity:'0',
                overflow:'hidden'
              })
          );
        }
      }

      $('.nivo-slice', slider).height(sliceHeight);
      sliderImg.stop().animate({
        height: $(vars.currentImage).height()
      }, settings.animSpeed);
    };

    // Add boxes for box animations
    var createBoxes = function(slider, settings, vars){
      if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
      $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
      var boxWidth = Math.round(slider.width()/settings.boxCols),
          boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);


      for(var rows = 0; rows < settings.boxRows; rows++){
        for(var cols = 0; cols < settings.boxCols; cols++){
          if(cols === settings.boxCols-1){
            slider.append(
                $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
                  opacity:0,
                  left:(boxWidth*cols)+'px',
                  top:(boxHeight*rows)+'px',
                  width:(slider.width()-(boxWidth*cols))+'px'

                })
            );
            $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
          } else {
            slider.append(
                $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
                  opacity:0,
                  left:(boxWidth*cols)+'px',
                  top:(boxHeight*rows)+'px',
                  width:boxWidth+'px'
                })
            );
            $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
          }
        }
      }

      sliderImg.stop().animate({
        height: $(vars.currentImage).height()
      }, settings.animSpeed);
    };

    // Private run method
    var nivoRun = function(slider, kids, settings, nudge){
      // Get our vars
      var vars = slider.data('nivo:vars');

      // Trigger the lastSlide callback
      if(vars && (vars.currentSlide === vars.totalSlides - 1)){
        settings.lastSlide.call(this);
      }

      // Stop
      if((!vars || vars.stop) && !nudge) { return false; }

      // Trigger the beforeChange callback
      settings.beforeChange.call(this);

      // Set current background before change
      if(!nudge){
        sliderImg.attr('src', vars.currentImage.attr('src'));
      } else {
        if(nudge === 'prev'){
          sliderImg.attr('src', vars.currentImage.attr('src'));
        }
        if(nudge === 'next'){
          sliderImg.attr('src', vars.currentImage.attr('src'));
        }
      }

      vars.currentSlide++;
      // Trigger the slideshowEnd callback
      if(vars.currentSlide === vars.totalSlides){
        vars.currentSlide = 0;
        settings.slideshowEnd.call(this);
      }
      if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
      // Set vars.currentImage
      if($(kids[vars.currentSlide]).is('img')){
        vars.currentImage = $(kids[vars.currentSlide]);
      } else {
        vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
      }

      // Set active links
      if(settings.controlNav){
        $('a', vars.controlNavEl).removeClass('active');
        $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
      }

      // Process caption
      processCaption(settings);

      // Remove any slices from last transition
      $('.nivo-slice', slider).remove();

      // Remove any boxes from last transition
      $('.nivo-box', slider).remove();

      var currentEffect = settings.effect,
          anims = '';

      // Generate random effect
      if(settings.effect === 'random'){
        anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
            'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
        currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
        if(currentEffect === undefined) { currentEffect = 'fade'; }
      }

      // Run random effect from specified set (eg: effect:'fold,fade')
      if(settings.effect.indexOf(',') !== -1){
        anims = settings.effect.split(',');
        currentEffect = anims[Math.floor(Math.random()*(anims.length))];
        if(currentEffect === undefined) { currentEffect = 'fade'; }
      }

      // Custom transition as defined by "data-transition" attribute
      if(vars.currentImage.attr('data-transition')){
        currentEffect = vars.currentImage.attr('data-transition');
      }

      // Run effects
      vars.running = true;
      var timeBuff = 0,
          i = 0,
          slices = '',
          firstSlice = '',
          totalBoxes = '',
          boxes = '';

      if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
        createSlices(slider, settings, vars);
        timeBuff = 0;
        i = 0;
        slices = $('.nivo-slice', slider);
        if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }

        slices.each(function(){
          var slice = $(this);
          slice.css({ 'top': '0px' });
          if(i === settings.slices-1){
            setTimeout(function(){
              slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
            }, (100 + timeBuff));
          } else {
            setTimeout(function(){
              slice.animate({opacity:'1.0' }, settings.animSpeed);
            }, (100 + timeBuff));
          }
          timeBuff += 50;
          i++;
        });
      } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
        createSlices(slider, settings, vars);
        timeBuff = 0;
        i = 0;
        slices = $('.nivo-slice', slider);
        if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }

        slices.each(function(){
          var slice = $(this);
          slice.css({ 'bottom': '0px' });
          if(i === settings.slices-1){
            setTimeout(function(){
              slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
            }, (100 + timeBuff));
          } else {
            setTimeout(function(){
              slice.animate({opacity:'1.0' }, settings.animSpeed);
            }, (100 + timeBuff));
          }
          timeBuff += 50;
          i++;
        });
      } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
        createSlices(slider, settings, vars);
        timeBuff = 0;
        i = 0;
        var v = 0;
        slices = $('.nivo-slice', slider);
        if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }

        slices.each(function(){
          var slice = $(this);
          if(i === 0){
            slice.css('top','0px');
            i++;
          } else {
            slice.css('bottom','0px');
            i = 0;
          }

          if(v === settings.slices-1){
            setTimeout(function(){
              slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
            }, (100 + timeBuff));
          } else {
            setTimeout(function(){
              slice.animate({opacity:'1.0' }, settings.animSpeed);
            }, (100 + timeBuff));
          }
          timeBuff += 50;
          v++;
        });
      } else if(currentEffect === 'fold'){
        createSlices(slider, settings, vars);
        timeBuff = 0;
        i = 0;

        $('.nivo-slice', slider).each(function(){
          var slice = $(this);
          var origWidth = slice.width();
          slice.css({ top:'0px', width:'0px' });
          if(i === settings.slices-1){
            setTimeout(function(){
              slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
            }, (100 + timeBuff));
          } else {
            setTimeout(function(){
              slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
            }, (100 + timeBuff));
          }
          timeBuff += 50;
          i++;
        });
      } else if(currentEffect === 'fade'){
        createSlices(slider, settings, vars);

        firstSlice = $('.nivo-slice:first', slider);
        firstSlice.css({
          'width': slider.width() + 'px'
        });

        firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
      } else if(currentEffect === 'slideInRight'){
        createSlices(slider, settings, vars);

        firstSlice = $('.nivo-slice:first', slider);
        firstSlice.css({
          'width': '0px',
          'opacity': '1'
        });

        firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
      } else if(currentEffect === 'slideInLeft'){
        createSlices(slider, settings, vars);

        firstSlice = $('.nivo-slice:first', slider);
        firstSlice.css({
          'width': '0px',
          'opacity': '1',
          'left': '',
          'right': '0px'
        });

        firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){
          // Reset positioning
          firstSlice.css({
            'left': '0px',
            'right': ''
          });
          slider.trigger('nivo:animFinished');
        });
      } else if(currentEffect === 'boxRandom'){
        createBoxes(slider, settings, vars);

        totalBoxes = settings.boxCols * settings.boxRows;
        i = 0;
        timeBuff = 0;

        boxes = shuffle($('.nivo-box', slider));
        boxes.each(function(){
          var box = $(this);
          if(i === totalBoxes-1){
            setTimeout(function(){
              box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
            }, (100 + timeBuff));
          } else {
            setTimeout(function(){
              box.animate({ opacity:'1' }, settings.animSpeed);
            }, (100 + timeBuff));
          }
          timeBuff += 20;
          i++;
        });
      } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
        createBoxes(slider, settings, vars);

        totalBoxes = settings.boxCols * settings.boxRows;
        i = 0;
        timeBuff = 0;

        // Split boxes into 2D array
        var rowIndex = 0;
        var colIndex = 0;
        var box2Darr = [];
        box2Darr[rowIndex] = [];
        boxes = $('.nivo-box', slider);
        if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
          boxes = $('.nivo-box', slider)._reverse();
        }
        boxes.each(function(){
          box2Darr[rowIndex][colIndex] = $(this);
          colIndex++;
          if(colIndex === settings.boxCols){
            rowIndex++;
            colIndex = 0;
            box2Darr[rowIndex] = [];
          }
        });

        // Run animation
        for(var cols = 0; cols < (settings.boxCols * 2); cols++){
          var prevCol = cols;
          for(var rows = 0; rows < settings.boxRows; rows++){
            if(prevCol >= 0 && prevCol < settings.boxCols){
              /* Due to some weird JS bug with loop vars
              being used in setTimeout, this is wrapped
              with an anonymous function call */
              (function(row, col, time, i, totalBoxes) {
                var box = $(box2Darr[row][col]);
                var w = box.width();
                var h = box.height();
                if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
                  box.width(0).height(0);
                }
                if(i === totalBoxes-1){
                  setTimeout(function(){
                    box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
                  }, (100 + time));
                } else {
                  setTimeout(function(){
                    box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
                  }, (100 + time));
                }
              })(rows, prevCol, timeBuff, i, totalBoxes);
              i++;
            }
            prevCol--;
          }
          timeBuff += 100;
        }
      }
    };

    // Shuffle an array
    var shuffle = function(arr){
      for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
      return arr;
    };

    // For debugging
    var trace = function(msg){
      if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
    };

    // Start / Stop
    this.stop = function(){
      if(!$(element).data('nivo:vars').stop){
        $(element).data('nivo:vars').stop = true;
        trace('Stop Slider');
      }
    };

    this.start = function(){
      if($(element).data('nivo:vars').stop){
        $(element).data('nivo:vars').stop = false;
        trace('Start Slider');
      }
    };

    // Trigger the afterLoad callback
    settings.afterLoad.call(this);

    return this;
  };

  $.fn.nivoSlider = function(options) {
    return this.each(function(key, value){
      var element = $(this);
      // Return early if this element already has a plugin instance
      if (element.data('nivoslider')) { return element.data('nivoslider'); }
      // Pass options to plugin constructor
      var nivoslider = new NivoSlider(this, options);
      // Store plugin object in this element's data
      element.data('nivoslider', nivoslider);
    });
  };

  //Default settings
  $.fn.nivoSlider.defaults = {
    effect: 'random',
    slices: 15,
    boxCols: 8,
    boxRows: 4,
    animSpeed: 500,
    pauseTime: 3000,
    startSlide: 0,
    directionNav: true,
    controlNav: true,
    controlNavThumbs: false,
    pauseOnHover: true,
    manualAdvance: false,
    prevText: 'Prev',
    nextText: 'Next',
    randomStart: false,
    beforeChange: function(){},
    afterChange: function(){},
    slideshowEnd: function(){},
    lastSlide: function(){},
    afterLoad: function(){}
  };

  $.fn._reverse = [].reverse;
}

// (function($) {
//     var NivoSlider = function(element, options){
//         // Defaults are below
//         var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
//
//         // Useful variables. Play carefully.
//         var vars = {
//             currentSlide: 0,
//             currentImage: '',
//             totalSlides: 0,
//             running: false,
//             paused: false,
//             stop: false,
//             controlNavEl: false
//         };
//
//         // Get this slider
//         var slider = $(element);
//         slider.data('nivo:vars', vars).addClass('nivoSlider');
//
//         // Find our slider children
//         var kids = slider.children();
//         kids.each(function() {
//             var child = $(this);
//             var link = '';
//             if(!child.is('img')){
//                 if(child.is('a')){
//                     child.addClass('nivo-imageLink');
//                     link = child;
//                 }
//                 child = child.find('img:first');
//             }
//             // Get img width & height
//             var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
//                 childHeight = (childHeight === 0) ? child.attr('height') : child.height();
//
//             if(link !== ''){
//                 link.css('display','none');
//             }
//             child.css('display','none');
//             vars.totalSlides++;
//         });
//
//         // If randomStart
//         if(settings.randomStart){
//             settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
//         }
//
//         // Set startSlide
//         if(settings.startSlide > 0){
//             if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
//             vars.currentSlide = settings.startSlide;
//         }
//
//         // Get initial image
//         if($(kids[vars.currentSlide]).is('img')){
//             vars.currentImage = $(kids[vars.currentSlide]);
//         } else {
//             vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
//         }
//
//         // Show initial link
//         if($(kids[vars.currentSlide]).is('a')){
//             $(kids[vars.currentSlide]).css('display','block');
//         }
//
//         // Set first background
//         var sliderImg = $('<img/>').addClass('nivo-main-image');
//         sliderImg.attr('src', vars.currentImage.attr('src')).show();
//         slider.append(sliderImg);
//
//         // Detect Window Resize
//         $(window).resize(function() {
//             slider.children('img').width(slider.width());
//             sliderImg.attr('src', vars.currentImage.attr('src'));
//             sliderImg.stop().height('auto');
//             $('.nivo-slice').remove();
//             $('.nivo-box').remove();
//         });
//
//         //Create caption
//         slider.append($('<div class="nivo-caption"></div>'));
//
//         // Process caption function
//         var processCaption = function(settings){
//             var nivoCaption = $('.nivo-caption', slider);
//             if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
//                 var title = vars.currentImage.attr('title');
//                 if(title.substr(0,1) == '#') title = $(title).html();
//
//                 if(nivoCaption.css('display') == 'block'){
//                     setTimeout(function(){
//                         nivoCaption.html(title);
//                     }, settings.animSpeed);
//                 } else {
//                     nivoCaption.html(title);
//                     nivoCaption.stop().fadeIn(settings.animSpeed);
//                 }
//             } else {
//                 nivoCaption.stop().fadeOut(settings.animSpeed);
//             }
//         }
//
//         //Process initial  caption
//         processCaption(settings);
//
//         // In the words of Super Mario "let's a go!"
//         var timer = 0;
//         if(!settings.manualAdvance && kids.length > 1){
//             timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
//         }
//
//         // Add Direction nav
//         if(settings.directionNav){
//             slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
//
//             $(slider).on('click', 'a.nivo-prevNav', function(){
//                 if(vars.running) { return false; }
//                 clearInterval(timer);
//                 timer = '';
//                 vars.currentSlide -= 2;
//                 nivoRun(slider, kids, settings, 'prev');
//             });
//
//             $(slider).on('click', 'a.nivo-nextNav', function(){
//                 if(vars.running) { return false; }
//                 clearInterval(timer);
//                 timer = '';
//                 nivoRun(slider, kids, settings, 'next');
//             });
//         }
//
//         // Add Control nav
//         if(settings.controlNav){
//             vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
//             slider.after(vars.controlNavEl);
//             for(var i = 0; i < kids.length; i++){
//                 if(settings.controlNavThumbs){
//                     vars.controlNavEl.addClass('nivo-thumbs-enabled');
//                     var child = kids.eq(i);
//                     if(!child.is('img')){
//                         child = child.find('img:first');
//                     }
//                     if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
//                 } else {
//                     vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
//                 }
//             }
//
//             //Set initial active link
//             $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
//
//             $('a', vars.controlNavEl).bind('click', function(){
//                 if(vars.running) return false;
//                 if($(this).hasClass('active')) return false;
//                 clearInterval(timer);
//                 timer = '';
//                 sliderImg.attr('src', vars.currentImage.attr('src'));
//                 vars.currentSlide = $(this).attr('rel') - 1;
//                 nivoRun(slider, kids, settings, 'control');
//             });
//         }
//
//         //For pauseOnHover setting
//         if(settings.pauseOnHover){
//             slider.hover(function(){
//                 vars.paused = true;
//                 clearInterval(timer);
//                 timer = '';
//             }, function(){
//                 vars.paused = false;
//                 // Restart the timer
//                 if(timer === '' && !settings.manualAdvance){
//                     timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
//                 }
//             });
//         }
//
//         // Event when Animation finishes
//         slider.bind('nivo:animFinished', function(){
//             sliderImg.attr('src', vars.currentImage.attr('src'));
//             vars.running = false;
//             // Hide child links
//             $(kids).each(function(){
//                 if($(this).is('a')){
//                    $(this).css('display','none');
//                 }
//             });
//             // Show current link
//             if($(kids[vars.currentSlide]).is('a')){
//                 $(kids[vars.currentSlide]).css('display','block');
//             }
//             // Restart the timer
//             if(timer === '' && !vars.paused && !settings.manualAdvance){
//                 timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
//             }
//             // Trigger the afterChange callback
//             settings.afterChange.call(this);
//         });
//
//         // Add slices for slice animations
//         var createSlices = function(slider, settings, vars) {
//         	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
//             $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
//             var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
//
//             for(var i = 0; i < settings.slices; i++){
//                 var sliceWidth = Math.round(slider.width()/settings.slices);
//
//                 if(i === settings.slices-1){
//                     slider.append(
//                         $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
//                             left:(sliceWidth*i)+'px',
//                             width:(slider.width()-(sliceWidth*i))+'px',
//                             height:sliceHeight+'px',
//                             opacity:'0',
//                             overflow:'hidden'
//                         })
//                     );
//                 } else {
//                     slider.append(
//                         $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
//                             left:(sliceWidth*i)+'px',
//                             width:sliceWidth+'px',
//                             height:sliceHeight+'px',
//                             opacity:'0',
//                             overflow:'hidden'
//                         })
//                     );
//                 }
//             }
//
//             $('.nivo-slice', slider).height(sliceHeight);
//             sliderImg.stop().animate({
//                 height: $(vars.currentImage).height()
//             }, settings.animSpeed);
//         };
//
//         // Add boxes for box animations
//         var createBoxes = function(slider, settings, vars){
//         	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
//             $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
//             var boxWidth = Math.round(slider.width()/settings.boxCols),
//                 boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
//
//
//             for(var rows = 0; rows < settings.boxRows; rows++){
//                 for(var cols = 0; cols < settings.boxCols; cols++){
//                     if(cols === settings.boxCols-1){
//                         slider.append(
//                             $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
//                                 opacity:0,
//                                 left:(boxWidth*cols)+'px',
//                                 top:(boxHeight*rows)+'px',
//                                 width:(slider.width()-(boxWidth*cols))+'px'
//
//                             })
//                         );
//                         $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
//                     } else {
//                         slider.append(
//                             $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
//                                 opacity:0,
//                                 left:(boxWidth*cols)+'px',
//                                 top:(boxHeight*rows)+'px',
//                                 width:boxWidth+'px'
//                             })
//                         );
//                         $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
//                     }
//                 }
//             }
//
//             sliderImg.stop().animate({
//                 height: $(vars.currentImage).height()
//             }, settings.animSpeed);
//         };
//
//         // Private run method
//         var nivoRun = function(slider, kids, settings, nudge){
//             // Get our vars
//             var vars = slider.data('nivo:vars');
//
//             // Trigger the lastSlide callback
//             if(vars && (vars.currentSlide === vars.totalSlides - 1)){
//                 settings.lastSlide.call(this);
//             }
//
//             // Stop
//             if((!vars || vars.stop) && !nudge) { return false; }
//
//             // Trigger the beforeChange callback
//             settings.beforeChange.call(this);
//
//             // Set current background before change
//             if(!nudge){
//                 sliderImg.attr('src', vars.currentImage.attr('src'));
//             } else {
//                 if(nudge === 'prev'){
//                     sliderImg.attr('src', vars.currentImage.attr('src'));
//                 }
//                 if(nudge === 'next'){
//                     sliderImg.attr('src', vars.currentImage.attr('src'));
//                 }
//             }
//
//             vars.currentSlide++;
//             // Trigger the slideshowEnd callback
//             if(vars.currentSlide === vars.totalSlides){
//                 vars.currentSlide = 0;
//                 settings.slideshowEnd.call(this);
//             }
//             if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
//             // Set vars.currentImage
//             if($(kids[vars.currentSlide]).is('img')){
//                 vars.currentImage = $(kids[vars.currentSlide]);
//             } else {
//                 vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
//             }
//
//             // Set active links
//             if(settings.controlNav){
//                 $('a', vars.controlNavEl).removeClass('active');
//                 $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
//             }
//
//             // Process caption
//             processCaption(settings);
//
//             // Remove any slices from last transition
//             $('.nivo-slice', slider).remove();
//
//             // Remove any boxes from last transition
//             $('.nivo-box', slider).remove();
//
//             var currentEffect = settings.effect,
//                 anims = '';
//
//             // Generate random effect
//             if(settings.effect === 'random'){
//                 anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
//                 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
//                 currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
//                 if(currentEffect === undefined) { currentEffect = 'fade'; }
//             }
//
//             // Run random effect from specified set (eg: effect:'fold,fade')
//             if(settings.effect.indexOf(',') !== -1){
//                 anims = settings.effect.split(',');
//                 currentEffect = anims[Math.floor(Math.random()*(anims.length))];
//                 if(currentEffect === undefined) { currentEffect = 'fade'; }
//             }
//
//             // Custom transition as defined by "data-transition" attribute
//             if(vars.currentImage.attr('data-transition')){
//                 currentEffect = vars.currentImage.attr('data-transition');
//             }
//
//             // Run effects
//             vars.running = true;
//             var timeBuff = 0,
//                 i = 0,
//                 slices = '',
//                 firstSlice = '',
//                 totalBoxes = '',
//                 boxes = '';
//
//             if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
//                 createSlices(slider, settings, vars);
//                 timeBuff = 0;
//                 i = 0;
//                 slices = $('.nivo-slice', slider);
//                 if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
//
//                 slices.each(function(){
//                     var slice = $(this);
//                     slice.css({ 'top': '0px' });
//                     if(i === settings.slices-1){
//                         setTimeout(function(){
//                             slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
//                         }, (100 + timeBuff));
//                     } else {
//                         setTimeout(function(){
//                             slice.animate({opacity:'1.0' }, settings.animSpeed);
//                         }, (100 + timeBuff));
//                     }
//                     timeBuff += 50;
//                     i++;
//                 });
//             } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
//                 createSlices(slider, settings, vars);
//                 timeBuff = 0;
//                 i = 0;
//                 slices = $('.nivo-slice', slider);
//                 if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }
//
//                 slices.each(function(){
//                     var slice = $(this);
//                     slice.css({ 'bottom': '0px' });
//                     if(i === settings.slices-1){
//                         setTimeout(function(){
//                             slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
//                         }, (100 + timeBuff));
//                     } else {
//                         setTimeout(function(){
//                             slice.animate({opacity:'1.0' }, settings.animSpeed);
//                         }, (100 + timeBuff));
//                     }
//                     timeBuff += 50;
//                     i++;
//                 });
//             } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
//                 createSlices(slider, settings, vars);
//                 timeBuff = 0;
//                 i = 0;
//                 var v = 0;
//                 slices = $('.nivo-slice', slider);
//                 if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
//
//                 slices.each(function(){
//                     var slice = $(this);
//                     if(i === 0){
//                         slice.css('top','0px');
//                         i++;
//                     } else {
//                         slice.css('bottom','0px');
//                         i = 0;
//                     }
//
//                     if(v === settings.slices-1){
//                         setTimeout(function(){
//                             slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
//                         }, (100 + timeBuff));
//                     } else {
//                         setTimeout(function(){
//                             slice.animate({opacity:'1.0' }, settings.animSpeed);
//                         }, (100 + timeBuff));
//                     }
//                     timeBuff += 50;
//                     v++;
//                 });
//             } else if(currentEffect === 'fold'){
//                 createSlices(slider, settings, vars);
//                 timeBuff = 0;
//                 i = 0;
//
//                 $('.nivo-slice', slider).each(function(){
//                     var slice = $(this);
//                     var origWidth = slice.width();
//                     slice.css({ top:'0px', width:'0px' });
//                     if(i === settings.slices-1){
//                         setTimeout(function(){
//                             slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
//                         }, (100 + timeBuff));
//                     } else {
//                         setTimeout(function(){
//                             slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
//                         }, (100 + timeBuff));
//                     }
//                     timeBuff += 50;
//                     i++;
//                 });
//             } else if(currentEffect === 'fade'){
//                 createSlices(slider, settings, vars);
//
//                 firstSlice = $('.nivo-slice:first', slider);
//                 firstSlice.css({
//                     'width': slider.width() + 'px'
//                 });
//
//                 firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
//             } else if(currentEffect === 'slideInRight'){
//                 createSlices(slider, settings, vars);
//
//                 firstSlice = $('.nivo-slice:first', slider);
//                 firstSlice.css({
//                     'width': '0px',
//                     'opacity': '1'
//                 });
//
//                 firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
//             } else if(currentEffect === 'slideInLeft'){
//                 createSlices(slider, settings, vars);
//
//                 firstSlice = $('.nivo-slice:first', slider);
//                 firstSlice.css({
//                     'width': '0px',
//                     'opacity': '1',
//                     'left': '',
//                     'right': '0px'
//                 });
//
//                 firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){
//                     // Reset positioning
//                     firstSlice.css({
//                         'left': '0px',
//                         'right': ''
//                     });
//                     slider.trigger('nivo:animFinished');
//                 });
//             } else if(currentEffect === 'boxRandom'){
//                 createBoxes(slider, settings, vars);
//
//                 totalBoxes = settings.boxCols * settings.boxRows;
//                 i = 0;
//                 timeBuff = 0;
//
//                 boxes = shuffle($('.nivo-box', slider));
//                 boxes.each(function(){
//                     var box = $(this);
//                     if(i === totalBoxes-1){
//                         setTimeout(function(){
//                             box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
//                         }, (100 + timeBuff));
//                     } else {
//                         setTimeout(function(){
//                             box.animate({ opacity:'1' }, settings.animSpeed);
//                         }, (100 + timeBuff));
//                     }
//                     timeBuff += 20;
//                     i++;
//                 });
//             } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
//                 createBoxes(slider, settings, vars);
//
//                 totalBoxes = settings.boxCols * settings.boxRows;
//                 i = 0;
//                 timeBuff = 0;
//
//                 // Split boxes into 2D array
//                 var rowIndex = 0;
//                 var colIndex = 0;
//                 var box2Darr = [];
//                 box2Darr[rowIndex] = [];
//                 boxes = $('.nivo-box', slider);
//                 if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
//                     boxes = $('.nivo-box', slider)._reverse();
//                 }
//                 boxes.each(function(){
//                     box2Darr[rowIndex][colIndex] = $(this);
//                     colIndex++;
//                     if(colIndex === settings.boxCols){
//                         rowIndex++;
//                         colIndex = 0;
//                         box2Darr[rowIndex] = [];
//                     }
//                 });
//
//                 // Run animation
//                 for(var cols = 0; cols < (settings.boxCols * 2); cols++){
//                     var prevCol = cols;
//                     for(var rows = 0; rows < settings.boxRows; rows++){
//                         if(prevCol >= 0 && prevCol < settings.boxCols){
//                             /* Due to some weird JS bug with loop vars
//                             being used in setTimeout, this is wrapped
//                             with an anonymous function call */
//                             (function(row, col, time, i, totalBoxes) {
//                                 var box = $(box2Darr[row][col]);
//                                 var w = box.width();
//                                 var h = box.height();
//                                 if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
//                                     box.width(0).height(0);
//                                 }
//                                 if(i === totalBoxes-1){
//                                     setTimeout(function(){
//                                         box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
//                                     }, (100 + time));
//                                 } else {
//                                     setTimeout(function(){
//                                         box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
//                                     }, (100 + time));
//                                 }
//                             })(rows, prevCol, timeBuff, i, totalBoxes);
//                             i++;
//                         }
//                         prevCol--;
//                     }
//                     timeBuff += 100;
//                 }
//             }
//         };
//
//         // Shuffle an array
//         var shuffle = function(arr){
//             for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
//             return arr;
//         };
//
//         // For debugging
//         var trace = function(msg){
//             if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
//         };
//
//         // Start / Stop
//         this.stop = function(){
//             if(!$(element).data('nivo:vars').stop){
//                 $(element).data('nivo:vars').stop = true;
//                 trace('Stop Slider');
//             }
//         };
//
//         this.start = function(){
//             if($(element).data('nivo:vars').stop){
//                 $(element).data('nivo:vars').stop = false;
//                 trace('Start Slider');
//             }
//         };
//
//         // Trigger the afterLoad callback
//         settings.afterLoad.call(this);
//
//         return this;
//     };
//
//     $.fn.nivoSlider = function(options) {
//         return this.each(function(key, value){
//             var element = $(this);
//             // Return early if this element already has a plugin instance
//             if (element.data('nivoslider')) { return element.data('nivoslider'); }
//             // Pass options to plugin constructor
//             var nivoslider = new NivoSlider(this, options);
//             // Store plugin object in this element's data
//             element.data('nivoslider', nivoslider);
//         });
//     };
//
//     //Default settings
//     $.fn.nivoSlider.defaults = {
//         effect: 'random',
//         slices: 15,
//         boxCols: 8,
//         boxRows: 4,
//         animSpeed: 500,
//         pauseTime: 3000,
//         startSlide: 0,
//         directionNav: true,
//         controlNav: true,
//         controlNavThumbs: false,
//         pauseOnHover: true,
//         manualAdvance: false,
//         prevText: 'Prev',
//         nextText: 'Next',
//         randomStart: false,
//         beforeChange: function(){},
//         afterChange: function(){},
//         slideshowEnd: function(){},
//         lastSlide: function(){},
//         afterLoad: function(){}
//     };
//
//     $.fn._reverse = [].reverse;
//
// })(jQuery);